/*
 * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */

/**
 */
package com.sun.corba.se.impl.ior.iiop;

import org.omg.CORBA_2_3.portable.OutputStream;

import com.sun.corba.se.spi.ior.TaggedComponentBase;
import com.sun.corba.se.spi.ior.iiop.RequestPartitioningComponent;
import com.sun.corba.se.spi.logging.CORBALogDomains;

import com.sun.corba.se.impl.logging.ORBUtilSystemException;
import com.sun.corba.se.impl.orbutil.ORBConstants;


public class RequestPartitioningComponentImpl extends TaggedComponentBase
    implements RequestPartitioningComponent {

  private static ORBUtilSystemException wrapper =
      ORBUtilSystemException.get(CORBALogDomains.OA_IOR);

  private int partitionToUse;

  public boolean equals(Object obj) {
    if (!(obj instanceof RequestPartitioningComponentImpl)) {
      return false;
    }

    RequestPartitioningComponentImpl other =
        (RequestPartitioningComponentImpl) obj;

    return partitionToUse == other.partitionToUse;
  }

  public int hashCode() {
    return partitionToUse;
  }

  public String toString() {
    return "RequestPartitioningComponentImpl[partitionToUse=" + partitionToUse + "]";
  }

  public RequestPartitioningComponentImpl() {
    partitionToUse = 0;
  }

  public RequestPartitioningComponentImpl(int thePartitionToUse) {
    if (thePartitionToUse < ORBConstants.REQUEST_PARTITIONING_MIN_THREAD_POOL_ID ||
        thePartitionToUse > ORBConstants.REQUEST_PARTITIONING_MAX_THREAD_POOL_ID) {
      throw wrapper.invalidRequestPartitioningComponentValue(
          new Integer(thePartitionToUse),
          new Integer(ORBConstants.REQUEST_PARTITIONING_MIN_THREAD_POOL_ID),
          new Integer(ORBConstants.REQUEST_PARTITIONING_MAX_THREAD_POOL_ID));
    }
    partitionToUse = thePartitionToUse;
  }

  public int getRequestPartitioningId() {
    return partitionToUse;
  }

  public void writeContents(OutputStream os) {
    os.write_ulong(partitionToUse);
  }

  public int getId() {
    return ORBConstants.TAG_REQUEST_PARTITIONING_ID;
  }
}
